home *** CD-ROM | disk | FTP | other *** search
/ TeX 1995 July / TeX CD-ROM July 1995 (Disc 1)(Walnut Creek)(1995).ISO / macros / tip / ntotext.tip < prev    next >
Text File  |  1993-09-15  |  4KB  |  120 lines

  1. % This macro source file is from the four volume series
  2. % "TeX in Practice" by Stephan von Bechtolsheim, published
  3. % 1993 by Springer-Verlag, New York.
  4. % Copyright 1993 Stephan von Bechtolsheim.
  5. % No warranty or liability is assumed.
  6. % This macro may be copied freely if no fees other than
  7. % media cost or shipping charges are charged and as long
  8. % as this copyright and the following source code itself
  9. % is not changed. Please see the series for further information.
  10. %
  11. % Version: 1.0
  12. % Date: May 1, 1993
  13. %
  14. %
  15. % This source code is documented in 3.3.16, p. I-63.
  16. % Original source in file "reg1.TEX", starting line 1835.
  17. \wlog{L: "ntotext.tip" ["reg1.TEX," l. 1835, p. I-63]}%
  18. % This file DOES belong to format "texip."
  19. \InputD{imodn.tip}
  20. \catcode`\@ = 11
  21. \def\@OneDigitNumberText #1#2{%
  22.     \ifcase #2\relax
  23.         \ifnum #1=0
  24.         \else
  25.             zero%
  26.         \fi
  27.         \or
  28.         one\or
  29.         two\or
  30.         three\or
  31.         four\or
  32.         five\or
  33.         six\or
  34.         seven\or
  35.         eight\or
  36.         nine% 
  37.     \else
  38.         \errmessage{\string\@OneDigitNumberText: number
  39.             \number#2 out of range.}%
  40.     \fi
  41. }
  42. \newcount\@NumberToConvert
  43. \newcount\@NumberToConvertTwo
  44. \newcount\@NumberToConvertAndFlag
  45. \def\NumberToText #1{% 
  46.     \@NumberToConvert = #1\relax    
  47.     \ifnum\@NumberToConvert < 0
  48.         minus
  49.         \@NumberToConvert = -\@NumberToConvert
  50.     \fi
  51.     \CheckRange{\@NumberToConvert}{0}{999999}%
  52.         {\string\NumberToText: numbers >= 1.000.000
  53.             not handled.}%
  54.     \@NumberToConvertAndFlag = 0
  55.     \ifnum\@NumberToConvert > 999
  56.         \@NumberToConvertTwo = \@NumberToConvert
  57.         \divide\@NumberToConvert by 1000
  58.         \@NumberToText
  59.         \space thousand and
  60.         \IModN{\@NumberToConvertTwo}{1000}{\@NumberToConvert}%
  61.     \fi 
  62.     \CheckRange{\@NumberToConvert}{0}{999}%
  63.         {\string\NumberToText: internal error 1}%
  64.     \@NumberToText
  65. }
  66. \newcount\@NumberToTextTmp
  67. \def\@NumberToText{%
  68.     \ifnum\@NumberToConvert > 99
  69.         \ValueOfDecimalPosition{\@NumberToConvert}{2}% 
  70.             {\@NumberToTextTmp}%
  71.         \@OneDigitNumberText{1}{\@NumberToTextTmp}% 
  72.         \space hundred and
  73.         \IModN{\@NumberToConvert}{100}{\@NumberToConvert}%
  74.     \fi
  75.     \ValueOfDecimalPosition{\@NumberToConvert}{1}%
  76.         {\@NumberToTextTmp}%
  77.     \ifnum\@NumberToTextTmp > 1
  78.         \ifcase\@NumberToTextTmp
  79.                 \errmessage{\string\@NumberToText:
  80.                     internal error 1.}%
  81.             \or
  82.                 \errmessage{\string\@NumberToText:
  83.                     internal error 2.}%
  84.             \or
  85.             twenty\or
  86.             thirty\or
  87.             forty\or
  88.             fifty\or
  89.             sixty\or
  90.             seventy\or
  91.             eighty\or
  92.             ninety%
  93.         \else
  94.             \errmessage{\string\@NumberToText:
  95.                 internal error 4.}%
  96.         \fi
  97.         \IModN{\@NumberToConvert}{10}{\@NumberToTextTmp}%
  98.             \@OneDigitNumberText{0}{\@NumberToTextTmp}%
  99.     \else
  100.         \ifnum\@NumberToTextTmp = 1
  101.             \advance\@NumberToConvert by -10
  102.             \ifcase\@NumberToConvert
  103.                 ten\or
  104.                 eleven\or
  105.                 twelve\or
  106.                 thirteen\or
  107.                 fourteen\or
  108.                 fifteen\or
  109.                 sixteen\or
  110.                 seventeen\or
  111.                 eighteen\or
  112.                 nineteen%
  113.             \fi
  114.         \else
  115.             \@OneDigitNumberText{1}{\@NumberToConvert}%
  116.         \fi
  117.     \fi
  118. }
  119. \catcode`\@ = 12
  120.